/**
 * @author JiuQi 玖柒
 * @date 2021/7/6 0:49
 */
public class T53 {
    public static void main(String[] args) {
        int[] nums = {1, -3, 3, 4, 1, -1};
        System.out.println(new Solution3().maxSubArray(nums));
    }
}

class Solution3 {
    public int maxSubArray(int[] nums) {
        if (nums == null) {
            return 0;
        }
        int max = nums[0];    // 全局最大值
        int subMax = nums[0];  // 前一个子组合的最大值
        for (int i = 1; i < nums.length; i++) {
            if (subMax > 0) {
                // 前一个子组合最大值大于0，正增益
                subMax = subMax + nums[i];
            } else {
                // 前一个子组合最大值小于0，负增益，抛弃前面的结果
                subMax = nums[i];
            }
            // 计算全局最大值
            //max 三目运算符  return (a >= b) ? a : b;
            max = Math.max(max, subMax);
        }
        return max;
    }
}
